package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.order.model.dto.PayResultDTO;
import com.ssy.lingxi.order.model.dto.PaymentCacheDTO;
import org.springframework.http.HttpHeaders;

/**
 * 缓存工具类
 * @author 万宁
 * @version 2.0.0
 * @date 2020-07-03
 */
public interface IBaseCacheService {

    /**
     * 获取用户信息
     * @param headers HttpHeaders信息
     * @return 缓存的用户信息
     */
    UserLoginCacheDTO checkUserFromCache(HttpHeaders headers);

    /**
     * 是否从平台后台登录
     * @param headers HttpHeaders信息
     * @return 缓存的用户信息
     */
    UserLoginCacheDTO needLoginFromManagePlatform(HttpHeaders headers);

    /**
     * 是否从业务平台Web客户端登录
     * @param headers HttpHeaders信息
     * @return 缓存的用户信息
     */
    UserLoginCacheDTO needLoginFromBusinessPlatform(HttpHeaders headers);

    /**
     * 是否从App客户端登录
     * @param headers HttpHeaders信息
     * @return 缓存的用户信息
     */
    UserLoginCacheDTO needLoginFromMobile(HttpHeaders headers);

    /**
     * 校验Web端请求的HttpHeader中是否包含source = 1
     * @param headers HttpHeaders信息
     */
    void checkWebRequestHeader(HttpHeaders headers);

    /**
     * 校验移动端请求的HttpHeader中是否包含source = 2
     * @param headers HttpHeaders信息
     */
    void checkMobileRequestHeader(HttpHeaders headers);

    /**
     * 校验平台后台请求的HttpHeader中是否包含source = 99
     * @param headers HttpHeaders信息
     */
    void checkPlatformRequestHeader(HttpHeaders headers);

    /**
     * 缓存预下单信息
     * @param key Redis Key值
     * @param value 字符串
     */
    void cachePreOrder(String key, String value);

    /**
     * 查询预下单信息
     * @param key Redis Key值
     * @return 字符串
     */
    String getPreOrder(String key);

    /**
     * 删除预下单信息
     * @param key Redis Key值
     */
    void deletePreOrder(String key);

    /**
     * 缓存支付是否成功
     * @param tradeNo 订单交易好
     * @param paySuccess 是否成功
     */
    void cacheOrderPayResult(String tradeNo, Boolean paySuccess);

    /**
     * 查询支付结果
     * @return 查询结果
     */
    PayResultDTO findOrderPayResult(String tradeNo);

    /**
     * 缓存支付的用户、支付记录等信息
     * @param attach     （在线支付）订单的透传参数
     * @param paymentCache 缓存内容
     */
    void cacheOrderPayment(String attach, PaymentCacheDTO paymentCache);

    /**
     * 查询缓存的支付用户、支付记录等信息
     * @param attach （在线支付）订单的透传参数
     * @return 支付用户、支付记录等信息
     */
    PaymentCacheDTO findOrderPayment(String attach);

    /**
     * 删除缓存的支付用户、支付记录等信息
     * @param attach （在线支付）订单的透传参数
     */
    void deleteOrderPayment(String attach);

    /**
     * 通过token获取用户登录信息
     * @param token HttpHeaders信息
     * @return 缓存的用户信息
     */
    UserLoginCacheDTO needLoginFromBusinessPlatform(String token);
}
